package org.example.cell;



import org.example.domain.JDBCInfo;
import org.example.domain.Page;

import java.beans.IntrospectionException;
import java.lang.reflect.InvocationTargetException;
import java.sql.SQLException;
import java.util.List;

/**
 * Cell的接口，定义Cell的接口入参出参类型
 */
public interface BaseCell<T> {

    /**
     * 分页查询数据
     * @param page      分页情况
     * @param jdbcInfo  数据库连接信息
     * @return 对象的集合
     */
    List<T> selectList(Page page, JDBCInfo jdbcInfo) throws SQLException, NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException, IntrospectionException;

    /**
     * 插入一条新数据到数据库
     * @param t          要插入的对象
     * @param jdbcInfo   JDBC连接信息
     * @return
     */
    boolean insert(T t, JDBCInfo jdbcInfo) throws SQLException, InvocationTargetException, IllegalAccessException, IntrospectionException;

    /**
     * 按此对象的ID，将对象的字段更新到数据库
     * @param t         要更新的数据
     * @param jdbcInfo  数据库连接信息
     * @return          执行结果
     */
    boolean update(T t, JDBCInfo jdbcInfo) throws SQLException, InvocationTargetException, IllegalAccessException, IntrospectionException;

    /**
     * 按照ID删除数据
     * @param id        要删除的数据的ID
     * @param jdbcInfo  数据库连接信息
     * @return          删除结果
     */
    boolean deleteByID(Integer id, JDBCInfo jdbcInfo);
}
